package br.com.esporte.view.site.component.listaGrupo;

import java.util.List;

import org.apache.wicket.behavior.AttributeAppender;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.link.Link;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.model.Model;

import br.com.esporte.model.Grupo;
import br.com.esporte.view.infra.generic.Pagina;
import br.com.esporte.view.infra.html.HtmlParam;
import br.com.esporte.view.site.component.image.ImageRelativePath;
import br.com.esporte.view.site.component.tipoEsporte.TipoEsporteAbstract;
import br.com.esporte.view.site.template.util.ConstantsTemplate;


/**
 * 
 * @author Milton Domingues
 *
 */
public class ListGrupoComponent extends TipoEsporteAbstract {

	private static final long serialVersionUID = -3041310943928809815L;

	private final String LIST_GRUPO_ID = "listGrupo";

	private List<Grupo> grupos;

	private IPaginaAcaoGrupo paginaAcaoGrupo;


	public ListGrupoComponent(String id, List<Grupo> grupos, IPaginaAcaoGrupo paginaAcaoGrupo) {
		super(id);
		this.paginaAcaoGrupo = paginaAcaoGrupo;
		this.grupos = grupos;
		montarComponente();
	}

	private Link<Pagina> criarLinkComunidade(ImageRelativePath imgComunidade, final Grupo grupo){
		Link<Pagina> linkComunidade = new Link<Pagina>("linkComunidade") {

			private static final long serialVersionUID = 6205142677086663155L;

			@Override
			public void onClick() {
				getPaginaAcaoGrupo().acaoGrupo(grupo);
			}
		};

		linkComunidade.add(imgComunidade);

		return linkComunidade;
	}

	private ListView<Grupo> criarListaGrupo(){

		ListView<Grupo> list = new ListView<Grupo>(LIST_GRUPO_ID, getGrupos()) {

			private static final long serialVersionUID = 1L;

			@Override
			protected void populateItem(ListItem<Grupo> item) {

				final Grupo grupo = (Grupo) item.getDefaultModelObject();

				WebMarkupContainer containerPerfil = new WebMarkupContainer("containerPerfil");

				String pathImgEsporte = ConstantsTemplate.getPathImageEsporte(grupo.getTipo().getCodigo());

				containerPerfil.add(new AttributeAppender(HtmlParam.CLASS, new Model<String>(getClassTipoEsporteBgGrande(grupo.getTipo())), " "));

				ImageRelativePath imgComunidade = new ImageRelativePath("imgComunidade", pathImgEsporte);
				containerPerfil.add(criarLinkComunidade(imgComunidade, grupo));

				Label nome = new Label("nomeGrupoList", grupo.getDescricao());
				nome.add(criarAppenderClassTipo(grupo.getTipo()));

				Label descricao = new Label("descricaoGrupoList", grupo.getDescricao());
				descricao.add(criarAppenderClassTipo(grupo.getTipo()));

				String pathImgPresidente = ConstantsTemplate.getPathImageUsuario(grupo.getPresidente().getImagem());
				ImageRelativePath presidente = new ImageRelativePath("imgPresidente", pathImgPresidente);

				item.add(containerPerfil);
				item.add(presidente);
				item.add(nome);
				item.add(descricao);
			}

		};

		return list;
	}

	public List<Grupo> getGrupos() {
		return grupos;
	}

	public IPaginaAcaoGrupo getPaginaAcaoGrupo() {
		return paginaAcaoGrupo;
	}

	@Override
	public void montarComponente() {
		add(criarListaGrupo());
	}

	public void setGrupos(List<Grupo> grupos) {
		this.grupos = grupos;
	}

	public void setPaginaAcaoGrupo(IPaginaAcaoGrupo paginaAcaoGrupo) {
		this.paginaAcaoGrupo = paginaAcaoGrupo;
	}

}
